package com.guoli.print;
import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;
/*
FTP 上传文件到打印服务器（网口转并口）的方法：

环境：假设要打印机服务器地址为  192.168.1.200
要发送的文件名为 zebraprint.txt（标签格式文件）
文件路径为 C:\pfile\zebraprint.txt
	FTP信息的配置文件为ftpconfig.txt文件路径为 C:\pfile\ftpconfig.txt
	
格式：ftp -s:[配置文件] [ftp地址]
FTP  -S:C:\pfile\ftpconfig.txt  192.168.1.200

FTP信息的配置文件  FTPCONFIG.TXT
ftpconfig.txt的文件内容是:
username
pwd
Send C:\pfile\zebraprint.txt
Quit
注释：前两条命令是固定的，是用户名和密码，不设密码的话，打2个回车换行。
Send C:\pfile\zebraprint.txt发送zebraprint.txt到服务器
Quit 退出
如果命令运行有问题的话 可以加-A参数（匿名访问）
FTP -A -S:C:\pfile\ftpconfig.txt 192.168.1.200
*/
public class TestFtpPrint {

    private static final Logger logger = Logger.getLogger(TestFtpPrint.class);

    /**
     * Description: 向FTP服务器上传文件
     * @param url FTP服务器hostname
     * @param port FTP服务器端口
     * @param username FTP登录账号
     * @param password FTP登录密码
     * @param path FTP服务器保存目录
     * @param filename 上传到FTP服务器上的文件名
     * @param input 输入流
     * @return 成功返回true，否则返回false
     */
    public static boolean uploadFile(String url, String port, String username, String password, String path, String filename, InputStream input) {
        boolean returnValue = false;
        FTPClient ftp = new FTPClient();
        try {
            int reply;

            // 判断是否使用默认端口
//            if (CMCts.EMP.equals(port)) {
//                ftp.connect(url);
//            } else {
                int portNO = Integer.parseInt(port);
                ftp.connect(url, portNO);// 连接FTP服务器
//            }

            ftp.login(username, password);// 登录
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                logger.info("FTP SERVER REFUSED CONNECTION.");
                return returnValue;
            }
            
            ftp.changeWorkingDirectory(path);
            ftp.storeFile(filename, input);

            input.close();

            ftp.logout();
            returnValue = true;
        } catch (IOException e) {
            logger.info("FTPUPLOADUTIL UPLOD FILE ERROR :" + e);
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return returnValue;
    }

}
